package com.example.everying.utils;

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

import java.security.SecureRandom;

public class PaymentPasswordUtil {

    // 使用强度为12的BCrypt加密器（4-31之间，默认10）
    private static final PasswordEncoder ENCODER = new BCryptPasswordEncoder(12);

    /**
     * 加密支付密码
     * @param plainPassword 明文密码
     * @return 加密后的哈希值
     */
    public static String encrypt(String plainPassword) {
        return ENCODER.encode(plainPassword);
    }

    /**
     * 验证支付密码
     * @param plainPassword 用户输入的明文密码
     * @param hashedPassword 数据库存储的哈希密码
     * @return 是否匹配
     */
    public static boolean verify(String plainPassword, String hashedPassword) {
        return ENCODER.matches(plainPassword,  hashedPassword);
    }

    /**
     * 生成随机支付密码（可用于初始化或重置）
     * @return 随机密码（建议通过安全渠道发送给用户）
     */
    public static String generateRandomPassword() {
        // 使用安全随机数生成12位包含大小写字母和数字的密码
        String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
        SecureRandom random = new SecureRandom();
        StringBuilder sb = new StringBuilder(12);
        for (int i = 0; i < 12; i++) {
            sb.append(chars.charAt(random.nextInt(chars.length())));
        }
        return sb.toString();
    }
}
